import java.util.Arrays;

/*
 * @Author: lijing
 * @e-mail: 1413979079@qq.com
 * @LastEditors  : lijing
 * @Date: 2020-01-22 22:48:26
 * @LastEditTime : 2020-01-22 23:46:29
 * @FilePath: \algorithm\排序算法\冒泡排序\Sort.java
 * @Description: 冒泡排序练习
 */
public class Sort {
  public static void main(String[] args) {
    int[] arr = new int[] { 3, 2, 4, 1, 6, 5, 8, 3 };
    sort(arr);
    System.out.println(Arrays.toString(arr));
  }

  public static void sort(int[] arr) {
    // 非空判断
    int len = arr.length;
    if (arr == null && len == 0) {
      return;
    }
    // 使用flag优化循环次数
    boolean flag = true;
    for (int i = 0; i < len && flag; i++) {
      flag = false;
      // 注意这里循环终止条件是j>i,不是j>0,这样可以减少循环次数
      for (int j = len - 1; j > i; j--) {
        if (arr[j] < arr[j - 1]) {
          // 异或优化交换运算
          arr[j] = arr[j] ^ arr[j - 1];
          arr[j - 1] = arr[j] ^ arr[j - 1];
          arr[j] = arr[j] ^ arr[j - 1];
          flag = true;
        }
      }
    }
  }
}